// 配置路由器步骤 三步
// ①创建路由器文件 ②在入口文件中引入 ③应用路由器

const express = require('express');
// 引入模型对象
const Users = require('../models/users');
const router = new express.Router();

// 查看用户名和密码是否符合规则
// 定义规则：用户名user_name:以字母开头，字母 数字 下划线 用户名长度3-20
// 密码password规则：数字字母下划线 密码长度4-15
const user_name_reg = /^[A-Za-z][A-Za-z0-9_]{2,19}$/
const password_reg = /^[A-Za-z0-9_]{4,15}$/

// 注册 登录 修改密码 删除密码
// 注册
router.post('/register', async (req, res) => {
    // 收集用户名和密码
    console.log(req.body);
    const { user_name, password } = req.body;

    console.log(user_name_reg.test(user_name));
    if (user_name_reg.test(user_name) && password_reg.test(password)) {
        // 当符合规则 将其放到数据库当中
        // 步骤
        // ①查看数据库和服务器是否连接 有db文件 有引入 使用async await 确保数据库连接成功 没有建立
        // 存储数据要看是否有对应的集合 有直接用 没有创建
        try {
            await Users.create(req.body);
            res.send('注册成功');
        } catch (e) {
            console.log(e);
            res.send('网络延迟 请重新注册');
        }
        res.send('符合规则');
    } else {
        res.send('用户名和密码不符合规则 请重新注册')
    }
    res.send('收集到用户名和密码');
})
// 登录
router.post('/login', async (req, res) => {
    const { user_name, password } = req.body;
    if (user_name_reg.test(user_name) && password_reg.test(password)) {
        // 符合规则后 从数据库中根据用户名查询对应的密码 如果有 匹配密码是否一致 一致 登录成功 不一致 登录失败 如果没有 该用户不存在 请注册
        try {
            const user = await Users.findOne({ user_name });
            // user有两类 一类是查询到的用户名密码 一类是null
            if (user) {
                if (user.password == password) {
                    res.send('登录成功');
                } else {
                    res.send('密码错误！！');
                }
            } else {
                res.send('该用户不存在 请注册');
            }
        } catch (e) {
            console.log(e);
            res.send('网络延迟！！')
        }
    } else {
        res.send('用户名和密码规则不符合规则！！');
    }
})
// 修改密码 方案一 通过post发送
router.post('/edipost', async (req, res) => {
    console.log(req.body);
    try {
        // users这个模型对象中更新 updateOne
        // 修改密码：一个用户名 第二个是新密码
        const result = await Users.updateOne({ user_name: req.body.user_name }, { $set: { password: req.body.password } });
        console.log(result);
        res.send('修改密码成功');
    } catch (e) {
        console.log(e);
        res.send('网络延迟');
    }
})
// 修改密码不建议使用get 不安全
// 修改密码的方法二
router.get('/editQuery', async (req, res) => {
    // 通过get请求的query参数获取用户名和新密码
    // ?key= value&key=value
    console.log(req.query);
    try {
        // users这个模型对象中更新 updateOne
        // 修改密码：一个用户名 第二个是新密码
        const result = await Users.updateOne({ user_name: req.query.user_name }, { $set: { password: req.query.password } });
        console.log(result);
        res.send('修改密码成功');
    } catch (e) {
        console.log(e);
        res.send('网络延迟');
    }
})
// get请求的params
router.get('/editparams/:user_name/:password', async (req, res) => {
    console.log(req.params);
    try {
        // users这个模型对象中更新 updateOne
        // 修改密码：一个用户名 第二个是新密码
        const result = await Users.updateOne({ user_name: req.params.user_name }, { $set: { password: req.params.password } });
        console.log(result);
        res.send('修改密码成功');
    } catch (e) {
        console.log(e);
        res.send('网络延迟');
    }
})
//删除密码
router.get('/del', (req, res) => {
    console.log(req.query);
    try {
        const result = Users.deleteOne({ user_name: req.query.user_name });
        console.log(result);
        res.send('删除成功');
    } catch (e) {
        console.log(e);
        res.send('网络延迟');
    }
})

module.exports = router;